基于策略的算法(1):Policy Gradient, REINFORCE
接下来我们进入另一个视角: 基于策略的算法
我们之前的算法都是基于值函数的,比如Q-learning,Sarsa等等。这些算法都是直接学习值函数,然后再通过值函数来选择动作。而基于策略的算法则是直接学习策略,然后再通过策略来选择动作。
基于值函数的哪里都挺好的,TD的方法也解决了大方差(未来的奖励依赖于未来的policy)的问题, 但基于值函数的算法有一个问题在于, 它选择策略需要计算所有的动作下的值函数, 再去取最大的。如果是离散的动作空间的话还好,但如果是连续的动作空间的话,这个计算量就太大了。
为了解决连续的动作空间的问题, 我们还是仿照之前的思路, 用一个神经网络来拟合策略。这个神经网络的输入是状态, 输出是动作的概率分布。这样我们就可以直接从这个概率分布中采样出动作。就引出了所谓"基于策略"的算法。对策略函数使用梯度上升的方法,使得策略函数的期望回报最大化。
但这里又绕回到原来那个问题, 策略决定未来的reward, 叠加起来导致方差太大, 不利于训练, 因而我们有许多种解决方案:
- 用基线(baseline)减小方差
->
REINFORCE with baseline - 限制策略的改变量
->
TRPO, PPO, ...
但即使有这些方法, 它的方差还是比较大, 是不能和value-based的方法比的, 因此引出了将policy-based和value-based结合的Actor-Critic系列 算法,具体来说是用value-based算法当actor学到的东西作为policy算法(critic)的梯度更新参数
Policy Gradient
还是拿马里奥举例, 我们把策略函数用神经网络建模, 其架构大致如下:
我们想要优化的是神经网络的参数θ, 如何设计优化目标?
, 我们只需要消去s即可,也是经典的用期望的手法